// Copyright 2015 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#ifndef NET_BASE_LOOKUP_STRING_IN_FIXED_SET_H_
#define NET_BASE_LOOKUP_STRING_IN_FIXED_SET_H_

#include <stddef.h>

#include "net/base/net_export.h"

namespace net {

enum {
    kDafsaNotFound = -1, // key is not in set
    kDafsaFound = 0, // key is in set
    // The following return values are used by the implementation of
    // GetDomainAndRegistry() and are probably not generally useful.
    kDafsaExceptionRule = 1, // key excluded from set via exception
    kDafsaWildcardRule = 2, // key matched a wildcard rule
    kDafsaPrivateRule = 4, // key matched a private rule
};

// Looks up the string |key| with length |key_length| in a fixed set of
// strings. The set of strings must be known at compile time. It is converted to
// a graph structure named a DAFSA (Deterministic Acyclic Finite State
// Automaton) by the script make_dafsa.py during compilation. This permits
// efficient (in time and space) lookup. The graph generated by make_dafsa.py
// takes the form of a constant byte array which should be supplied via the
// |graph| and |length| parameters.  The return value is kDafsaNotFound,
// kDafsaFound, or a bitmap consisting of one or more of kDafsaExceptionRule,
// kDafsaWildcardRule and kDafsaPrivateRule ORed together.
NET_EXPORT int LookupStringInFixedSet(const unsigned char* graph,
    size_t length,
    const char* key,
    size_t key_length);

} // namespace net

#endif // NET_BASE_LOOKUP_STRING_IN_FIXED_SET_H_
